/**
 * 手机号码脱敏工具
 * 将手机号码中间6位用星号隐藏
 */

/**
 * 手机号码脱敏函数
 * @param {string} phone - 原始手机号码
 * @returns {string} - 脱敏后的手机号码
 */
function maskPhoneNumber(phone) {
  if (!phone || typeof phone !== 'string') {
    return phone;
  }

  // 移除所有非数字字符
  const cleanPhone = phone.replace(/\D/g, '');
  
  // 检查是否为有效的11位手机号码
  if (cleanPhone.length !== 11) {
    return phone; // 如果不是11位，返回原号码
  }

  // 中间6位用星号替换：前3位 + 6个星号 + 后2位
  const maskedPhone = cleanPhone.substring(0, 3) + '******' + cleanPhone.substring(9);
  
  return maskedPhone;
}

/**
 * 批量处理对象中的手机号码脱敏
 * @param {Object} data - 包含手机号码的数据对象
 * @param {string[]} phoneFields - 需要脱敏的字段名数组，默认为 ['phone']
 * @returns {Object} - 脱敏后的数据对象
 */
function maskPhoneInObject(data, phoneFields = ['phone']) {
  if (!data || typeof data !== 'object') {
    return data;
  }

  const maskedData = { ...data };
  
  phoneFields.forEach(field => {
    if (maskedData[field]) {
      maskedData[field] = maskPhoneNumber(maskedData[field]);
    }
  });

  return maskedData;
}

/**
 * 批量处理数组中的手机号码脱敏
 * @param {Array} dataArray - 包含手机号码的数据数组
 * @param {string[]} phoneFields - 需要脱敏的字段名数组，默认为 ['phone']
 * @returns {Array} - 脱敏后的数据数组
 */
function maskPhoneInArray(dataArray, phoneFields = ['phone']) {
  if (!Array.isArray(dataArray)) {
    return dataArray;
  }

  return dataArray.map(item => maskPhoneInObject(item, phoneFields));
}

module.exports = {
  maskPhoneNumber,
  maskPhoneInObject,
  maskPhoneInArray
};
